package com.itheima.d8_thread_pool;

import java.util.concurrent.*;

/*
    目标：掌握线程池的创建。

    Executors : 是一个线程池的工具类，提供了很多静态方法用于返回不同特点的线程池对象。
    方法名称
        public static ExecutorService newFixedThreadPool(int nThreads)	创建固定线程数量的线程池，如果某个线程因为执行异常而结束，那么线程池会补充一个新线程替代它。
        public static ExecutorService newSingleThreadExecutor()	创建只有一个线程的线程池对象，如果该线程出现异常而结束，那么线程池会补充一个新线程。
        public static ExecutorService newCachedThreadPool()	线程数量随着任务增加而增加，如果线程任务执行完毕且空闲了60s则会被回收掉。
        public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize)	创建一个线程池，可以实现在给定的延迟后运行任务，或者定期执行任务。

 */
public class ThreadPoolTest4 {
    public static void main(String[] args) throws Exception {
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
                3,
                10,
                60,
                TimeUnit.SECONDS,
                new ArrayBlockingQueue<>(20),
                Executors.defaultThreadFactory(),
                new ThreadPoolExecutor.AbortPolicy()
        );
        Future<Integer> submit = threadPoolExecutor.submit(new Aa(10));
        System.out.println(submit.get());
    }
}
class Aa implements Callable<Integer>{
    private int num;

    public Aa(int num) {
        this.num = num;
    }
int sum=0;
    @Override
    public Integer call() throws Exception {
        for (int i = 0; i <= num; i++) {
            sum+=i;
        }
        return sum;
    }
}